package com.java.service;

import com.java.bean.User;
import com.java.dao.BaseUserDao;
import com.java.dao.impl.UserDaoMysql;
import com.java.exception.DuplicateException;

import java.util.List;
import java.util.Map;

public class UserService {

    private static final BaseUserDao dao = new UserDaoMysql();

    /**
     * 控制台参数 size day
     *
     * @return 控制台参数
     */
    public static Map<String, Integer> console() {
        return dao.console();
    }

    /**
     * 获取总条数
     *
     * @return 总条数
     */
    public static int total() {
        return dao.total();
    }

    /**
     * 根据用户名查找用户信息
     *
     * @param uname 用户名
     * @return 用户信息
     */
    public static User getUserByName(String uname) {
        return dao.getUserByName(uname);
    }

    /**
     * 根据email查找用户信息
     *
     * @param email email
     * @return 用户信息
     */
    public static User getUserByEmail(String email) {
        return dao.getUserByEmail(email);
    }

    /**
     * 根据用户手机号码查找用户信息
     *
     * @param uphone 用户手机号码
     * @return 用户信息
     */
    public static User getUserByPhone(String uphone) {
        return dao.getUserByPhone(uphone);
    }

    /**
     * 列出用户
     *
     * @param offset     起始位置
     * @param pageNumber 查询数量
     * @return 用户集合
     */
    public static List<User> listUser(int offset, int pageNumber) {
        return dao.listUser(offset, pageNumber);
    }

    /**
     * 添加用户
     *
     * @param user 用户信息 参数：name phone email password regdate
     * @return -2 = '用户名被占用',
     *         -3 = '电话号码已被注册',
     *         -1 = '出错了。。。请稍后再重试',
     *         -4 = '电子邮箱地址已被注册'
     *          其他数值 = 成功,没有出错
     */
    public static int insert(User user) throws DuplicateException {
        if (CourierService.getCourierByEmail(user.getEmail()) != null) return -4;
        user.setLogintime(user.getRegtime());
        return dao.insert(user);
    }

    /**
     * 更新用户信息
     *
     * @param id      用户id
     * @param newUser 新的用户信息 参数：name phone email password
     * @return -2 = '用户名被占用',
     *         -3 = '电话号码已被注册',
     *         -1 = '出错了。。。请稍后再重试',
     *         -4 = '电子邮箱地址已被注册'
     *          其他数值 = 成功,没有出错
     */
    public static int update(int id, User newUser) throws DuplicateException {
        return dao.update(id, newUser);
    }

    /**
     * 删除用户（假删除）
     *
     * @param id 用户id
     * @return 删除成功 true  失败 false
     */
    public static boolean delete(int id) {
        return dao.delete(id) > 0;
    }

    /**
     * 用户登录，并修改登录时间
     *
     * @param name     用户名
     * @param password 密码
     * @return 登录成功返回用户信息，否则返回null
     */
    public static User login(String name, String password) {
        return dao.login(name, password);
    }
}
